using System;
using System.Collections.Generic;
using System.Text;
using System.Data.SqlClient;
using System.Configuration;

namespace RRHH.Competencias.DataAccessLayer.SqlServerProvider
{
    /// <summary>
    /// Crea conexiones a Base de Datos SqlServer y mantiene la informacion de la conexion
    /// </summary>
    class DALSqlServerConnection
    {
        private SqlConnection miConexion;        
        private string cadenaConexion;
        private string entornoEjecucion;

        #region Constructores
        /// <summary>
        /// Instancia el objeto preparandolo para acceder a la una base de datos
        /// </summary>
        /// <param name="empresa"></param>
        public DALSqlServerConnection()
        {           

            this.entornoEjecucion = ConfigurationManager.AppSettings["EntornoEjecucion"];            
        }
		#endregion

        #region Propiedades
        /// <summary>
        /// Obtiene una conexion activa a la base de datos
        /// </summary>
        public SqlConnection Conexion
        {
            get 
            {
                cadenaConexion = this.GetCadenaConexion();
                miConexion = new SqlConnection(cadenaConexion);

                try
                {
                    miConexion.Open();
                }
                catch (SqlException ex)
                {
                    throw new DALException("No se pudo conectar a la Base de Datos. " + ex.Message);
                }

                return miConexion;
            }
        }
       
        public string Servidor
        {
            get { return this.GetServidor(); }
        }

        public string UsuarioBD
        {
            get { return this.GetUsuarioDB(); }
        }

        public string ContraseniaBD
        {
            get { return this.GetContraseniaDB(); }
        }

        public string BaseDatos
        {
            get { return this.GetBaseDatos(); }
        }
        #endregion

        #region Metodos
        private string GetCadenaConexion()
        {
            return ConfigurationManager.ConnectionStrings["ADUS"].ToString();
        }

        private string GetServidor()
        {
            string[] componentesCadena = cadenaConexion.Split(new char[] { ';' });
            return componentesCadena[0].Replace("data source=", string.Empty).Trim();
        }

        private string GetBaseDatos()
        {
            string[] componentesCadena = cadenaConexion.Split(new char[] { ';' });
            return componentesCadena[3].Replace("initial catalog=", string.Empty).Trim();
        }

        private string GetUsuarioDB()
        {
            string[] componentesCadena = cadenaConexion.Split(new char[] { ';' });
            return componentesCadena[1].Replace("user id=", string.Empty).Trim();
        }

        private string GetContraseniaDB()
        {
            string[] componentesCadena = cadenaConexion.Split(new char[] { ';' });
            return componentesCadena[2].Replace("password=", string.Empty).Trim();
        }
        #endregion
    }
}
